Forwarded from Библиотека задач по Java | тесты, код, задания
Что будет результатом кода?
Anonymous Quiz
24%
Ошибка компиляции
4%
null
53%
10
4%
0
15%
ClassCastException
Разработчик (Managed Greenplum) — 300 000 — 400 000 ₽ — удалёнка
Java Tech Lead — от 380 000 ₽ — гибрид, удалёнка (Санкт-Петербург, Казань, Сочи)
Java разработчик (Platform V Works::TaskTracker) — до 300 000 ₽ — гибрид, удалёнка (Санкт-Петербург, Казань, Сочи)
Team Lead Full Stack разработчик (Java + React) — от 300 000 до 400 000 ₽ — удалёнка
Please open Telegram to view this post
VIEW IN TELEGRAM
Проблема: при обработке больших объемов данных важно не только их собрать, но и правильно структурировать для дальнейшего анализа. Обычные SQL-запросы могут стать громоздкими и сложными, особенно когда речь идет о масштабируемости и производительности.
Решение: в книге «Analytics Engineering with SQL and dbt: Building Meaningful Data Models at Scale» авторы описывают, как использовать dbt (data build tool) для построения и трансформации данных. dbt позволяет создавать чистые, поддерживаемые и легко масштабируемые модели данных, используя простые SQL-запросы, что значительно ускоряет процессы аналитики.
Пример кода:
-- Пример модели dbt для расчета среднего чека по категориям товаров
WITH base AS (
SELECT
category_id,
SUM(order_amount) AS total_sales,
COUNT(DISTINCT order_id) AS total_orders
FROM raw.orders
GROUP BY category_id
)
SELECT
category_id,
total_sales / total_orders AS avg_order_value
FROM base
Преимущества:
— Dbt позволяет быстро разрабатывать и тестировать модели данных, сокращая время от идеи до реализации.
— Подходы, описанные в книге, позволяют строить модели, которые легко масштабируются по мере роста данных.
— Акцент на совместной работе между аналитиками и инженерами способствует более эффективному решению задач.
Еще больше полезных книг — в нашем канале @progbook
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 6 принципов безопасности API
API — это не просто интерфейс, а ворота в вашу систему. Без должной защиты они становятся уязвимой точкой для атак.
🔐 Ключевые принципы безопасности API:
— Использование HTTPS
— Аутентификация и авторизация
— Ограничение запросов
— Валидация входных данных
— Управление доступом на основе ролей (RBAC)
— Мониторинг и логирование
🔗 Подробнее в статье
🐸 Библиотека джависта #буст
API — это не просто интерфейс, а ворота в вашу систему. Без должной защиты они становятся уязвимой точкой для атак.
🔐 Ключевые принципы безопасности API:
— Использование HTTPS
— Аутентификация и авторизация
— Ограничение запросов
— Валидация входных данных
— Управление доступом на основе ролей (RBAC)
— Мониторинг и логирование
Please open Telegram to view this post
VIEW IN TELEGRAM
💔AI vs Developer: who wins?
Бигтех уже режет найм разработчиков. Вайб-кодинг повсюду. Джуны не нужны. Но так ли это на самом деле?
Мы хотим разобраться, как ИИ влияет на рынок труда в IT. В реальности, а не в головах CEO или HR. Поэтому приглашаем пройти опрос.
Результаты нашего исследования позволят выяснить, сколько разработчиков потеряли работу из-за ИИ? Какие навыки сейчас ценятся больше всего? Кто зарабатывает больше — те, кто использует ИИ или игнорирует?
👾 Расскажите свою историю, чтобы помочь комьюнити: https://clc.to/aFntFw
Бигтех уже режет найм разработчиков. Вайб-кодинг повсюду. Джуны не нужны. Но так ли это на самом деле?
Мы хотим разобраться, как ИИ влияет на рынок труда в IT. В реальности, а не в головах CEO или HR. Поэтому приглашаем пройти опрос.
Результаты нашего исследования позволят выяснить, сколько разработчиков потеряли работу из-за ИИ? Какие навыки сейчас ценятся больше всего? Кто зарабатывает больше — те, кто использует ИИ или игнорирует?
👾 Расскажите свою историю, чтобы помочь комьюнити: https://clc.to/aFntFw
Ищете решение для построения масштабируемого микросервиса с использованием Event Sourcing и CQRS? AI поможет вам сгенерировать шаблон, который будет учитывать все архитектурные принципы и лучшие практики для сложных бизнес-логик.
📝 Промпт:
Generate a Spring Boot microservice that implements Event Sourcing and CQRS (Command Query Responsibility Segregation).
— Implement event storage (using EventStore or any other event-sourcing mechanism).
— Design the service layer using separate models for command and query operations.
— Use an event-driven approach with messaging (e.g., Kafka or RabbitMQ) to communicate between services.
— Secure the API with JWT authentication and role-based access control (Spring Security).
— Implement database persistence for event snapshots and projections (using Spring Data JPA).
— Добавьте
support asynchronous messaging with Kafka or RabbitMQ
для обработки событий между микросервисами.— Добавьте
implement Command and Query models using CQRS
для разделения логики записи и чтения данных.— Добавьте
integrate snapshotting mechanism for efficient aggregate recovery
и управление состоянием событий.— Добавьте
enable monitoring and tracing with Spring Actuator and Zipkin
для отслеживания производительности и запросов.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🎯 Как настроить фильтрацию запросов с помощью Spring Security и IP-блокировки
Для улучшения безопасности вашего приложения можно настроить фильтрацию запросов с использованием Spring Security, а также внедрить блокировку определённых IP-адресов.
1️⃣ Добавление зависимостей
В файл pom.xml добавьте следующие зависимости:
2️⃣ Создание фильтра для блокировки IP-адресов
Создайте фильтр, который будет проверять IP-адрес пользователя и блокировать его, если он находится в списке запрещённых:
3️⃣ Настройка Spring Security для использования фильтра
Теперь настроим Spring Security, чтобы наш фильтр IP-блокировки применялся ко всем входящим запросам:
4️⃣ Создание контроллера для тестирования
Создадим простой контроллер с двумя маршрутами: один доступен всем пользователям, а другой требует аутентификации:
5️⃣ Важно
Этот подход не является универсальной защитой от всех типов атак. Он помогает ограничить доступ для определённых IP-адресов, но не защищает от более сложных угроз, таких как атаки с подменой IP (например, через прокси-серверы).
Для более комплексной защиты используйте дополнительные механизмы, такие как WAF, анти-DDoS системы, а также более детальную настройку доступа через роли и права.
🐸 Библиотека джависта #буст
Для улучшения безопасности вашего приложения можно настроить фильтрацию запросов с использованием Spring Security, а также внедрить блокировку определённых IP-адресов.
В файл pom.xml добавьте следующие зависимости:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Создайте фильтр, который будет проверять IP-адрес пользователя и блокировать его, если он находится в списке запрещённых:
@Component
public class IpFilter extends OncePerRequestFilter {
private static final Set<String> blockedIps = new HashSet<>(Arrays.asList("192.168.1.100", "10.0.0.5"));
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
String ipAddress = request.getRemoteAddr();
if (blockedIps.contains(ipAddress)) {
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
response.getWriter().write("Access Denied: Your IP is blocked.");
return;
}
filterChain.doFilter(request, response);
}
}
Теперь настроим Spring Security, чтобы наш фильтр IP-блокировки применялся ко всем входящим запросам:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private IpFilter ipFilter;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/public/**").permitAll() // Доступ для публичных ресурсов
.anyRequest().authenticated() // Остальные запросы требуют аутентификации
.and()
.addFilterBefore(ipFilter, UsernamePasswordAuthenticationFilter.class); // Вставляем фильтр IP
}
}
Создадим простой контроллер с двумя маршрутами: один доступен всем пользователям, а другой требует аутентификации:
@RestController
public class TestController {
@GetMapping("/public/hello")
public String publicHello() {
return "Hello from public endpoint!";
}
@GetMapping("/private/hello")
public String privateHello() {
return "Hello from private endpoint, you are authenticated!";
}
}
Этот подход не является универсальной защитой от всех типов атак. Он помогает ограничить доступ для определённых IP-адресов, но не защищает от более сложных угроз, таких как атаки с подменой IP (например, через прокси-серверы).
Для более комплексной защиты используйте дополнительные механизмы, такие как WAF, анти-DDoS системы, а также более детальную настройку доступа через роли и права.
Please open Telegram to view this post
VIEW IN TELEGRAM
Недавно один из наших подписчиков поделился довольно любопытной историей, которая показала, как мелочи в коде могут неожиданно привести к проблемам с производительностью и утечкам памяти.
История от подписчика:
В одном проекте был использован ConcurrentHashMap для кеширования данных. Всё шло нормально, пока через некоторое время не начали замечать рост потребления памяти. Это проявлялось в том, что сервис стал работать всё медленнее, а метрики показывали высокий расход памяти.
После анализа стало ясно, что дело в кешировании: старые данные не удалялись, и кеш продолжал разрастаться. Это приводило к тому, что память заполнялась ненужными объектами, а сборщик мусора не справлялся с нагрузкой.
Для решения проблемы перешли на LRU кеш. Вместо того чтобы позволять кешу расти без контроля, был использован LinkedHashMap с ограничением размера. Это позволило реализовать механизм, автоматически удаляющий наименее используемые элементы.
Please open Telegram to view this post
VIEW IN TELEGRAM
🚨 ИИ уже съел ваше место?
Стоп. Давайте без паники и хайпа.
Пока одни кричат «ИИ всех заменит!», другие спокойно получают оффер за оффером. Пока CEO сокращают команды «из-за ИИ», разработчики с нужными скиллами поднимают зарплаты.
Мы копаем глубже твиттеров «экспертов» и собираем данные от тех, кто каждый день коммитит, деплоит, фиксит баги — но в этом нам нужна ваша помощь.
❓Хотим понять:
— Кого действительно уволили и почему
— Как изменились задачи разработчиков
— Где ИИ помогает, а где только мешает
— Какие роли появились, какие исчезли
— Сколько платят тем, кто «дружит» с ИИ
Без буллшита — только цифры и факты. Результаты будут открыты для всех.
📊 Чем больше участников — тем точнее картина. Поделитесь опытом: https://clc.to/aFntFw
Стоп. Давайте без паники и хайпа.
Пока одни кричат «ИИ всех заменит!», другие спокойно получают оффер за оффером. Пока CEO сокращают команды «из-за ИИ», разработчики с нужными скиллами поднимают зарплаты.
Мы копаем глубже твиттеров «экспертов» и собираем данные от тех, кто каждый день коммитит, деплоит, фиксит баги — но в этом нам нужна ваша помощь.
❓Хотим понять:
— Кого действительно уволили и почему
— Как изменились задачи разработчиков
— Где ИИ помогает, а где только мешает
— Какие роли появились, какие исчезли
— Сколько платят тем, кто «дружит» с ИИ
Без буллшита — только цифры и факты. Результаты будут открыты для всех.
📊 Чем больше участников — тем точнее картина. Поделитесь опытом: https://clc.to/aFntFw
👑 Магия IntelliJ IDEA
Если обычный поиск по проекту вам тесен — попробуйте Structural Search and Replace (SSR). Это инструмент, который ищет и меняет код не по тексту, а по его структуре — как настоящий парсер.
🔹 Что делает
Находит шаблоны кода в проекте с учётом синтаксиса языка. Можно искать любые конструкции — например, все System.out.println или пустые catch блоки — и сразу массово их переписывать.
🔹 Зачем это нужно
— Автоматически находить антипаттерны.
— Глобально рефакторить одинаковые места.
— Быстро готовить проект к миграции или внедрению новых стандартов кодирования.
🔹 Как использовать
— Откройте Edit → Find → Search Structurally или нажмите Shift + Shift и введите Structural Search.
— Задайте шаблон — например, System.out.println($arg$);.
— IDEA выделит все совпадения по всей кодовой базе.
— Для массовой замены найдите в поиске Replace Structurally — можно указать новый шаблон, и IDEA всё подставит сама.
— Шаблоны можно сохранять и делиться ими с командой.
🐸 Библиотека джависта #буст
Если обычный поиск по проекту вам тесен — попробуйте Structural Search and Replace (SSR). Это инструмент, который ищет и меняет код не по тексту, а по его структуре — как настоящий парсер.
🔹 Что делает
Находит шаблоны кода в проекте с учётом синтаксиса языка. Можно искать любые конструкции — например, все System.out.println или пустые catch блоки — и сразу массово их переписывать.
🔹 Зачем это нужно
— Автоматически находить антипаттерны.
— Глобально рефакторить одинаковые места.
— Быстро готовить проект к миграции или внедрению новых стандартов кодирования.
🔹 Как использовать
— Откройте Edit → Find → Search Structurally или нажмите Shift + Shift и введите Structural Search.
— Задайте шаблон — например, System.out.println($arg$);.
— IDEA выделит все совпадения по всей кодовой базе.
— Для массовой замены найдите в поиске Replace Structurally — можно указать новый шаблон, и IDEA всё подставит сама.
— Шаблоны можно сохранять и делиться ими с командой.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔍 Загадка для разработчиков
Что за термин загадан на картинке?
💬 Пишите в комменты ответ под спойлером.
🐸 Библиотека джависта #междусобойчик
Что за термин загадан на картинке?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔹 Spring Data Ahead of Time Repositories
Автор описывает внедрение механизма предварительной генерации кода (AOT) для репозиториев в Spring Data 4.0, позволяя переносить подготовку запросов из фазы запуска приложения в фазу сборки.
🔹 Choco for Constraint Programming
Библиотека с инструментарием для решения задач в парадигме Constraint Programming. Такая парадигма подходит для задач, в которых нужно найти возможные значения для набора переменных, удовлетворяющих определенному набору условий. Например, решить головоломку судоку.
Please open Telegram to view this post
VIEW IN TELEGRAM
😱 Уже завтра — вебинар про AI-агентов! Мест почти не осталось
На вебинаре вы получите то, чего нет в открытых источниках — живой разбор, примеры и прямой диалог с экспертом. Но только если придёте.
➡️ Что будет:
— покажем структуру курса и ключевые модули
— обсудим вопросы, которые обычно остаются за кадром
— разберём реальные кейсы: как применять AI-агентов — от чат-ботов до систем поддержки решений
📅 Уже 23 июня в 19:00 МСК
🎙️ Ведёт Никита Зелинский — эксперт в AI и DS
👉 Зарегистрируйтесь заранее, чтобы не забыть:
https://clc.to/_lDV0Q
🫢 Для тех, кто дочитал до конца →промокод lucky, он даст −5.000₽ на курс
На вебинаре вы получите то, чего нет в открытых источниках — живой разбор, примеры и прямой диалог с экспертом. Но только если придёте.
➡️ Что будет:
— покажем структуру курса и ключевые модули
— обсудим вопросы, которые обычно остаются за кадром
— разберём реальные кейсы: как применять AI-агентов — от чат-ботов до систем поддержки решений
📅 Уже 23 июня в 19:00 МСК
🎙️ Ведёт Никита Зелинский — эксперт в AI и DS
👉 Зарегистрируйтесь заранее, чтобы не забыть:
https://clc.to/_lDV0Q
🫢 Для тех, кто дочитал до конца →
Forwarded from Библиотека задач по Java | тесты, код, задания
Forwarded from Библиотека задач по Java | тесты, код, задания
Что будет результатом кода?
Anonymous Quiz
10%
Ошибка компиляции
42%
TimeoutException
26%
Result: 42
15%
Result: null
7%
Result: 500
Java Middle разработчик — от 200 000 до 320 000 ₽ — гибрид (Москва)
Senior Java Developer — 450 000 — 600 000 ₽ — удалёнка (Москва, Санкт-Петербург, Екатеринбург, Сочи)
Junior+ Java-разработчик — от 120 000 ₽ — гибрид (Москва, Санкт-Петербург)
Java-разработчик (Служба управления роботами) — 250 000 — 450 000 ₽ — гибрид (Москва, Санкт-Петербург)
Please open Telegram to view this post
VIEW IN TELEGRAM
Проблема: частые обращения к базе данных могут существенно замедлить работу приложения. Необходимо внедрить механизм кэширования для ускорения доступа к данным.
Решение: в книге «Java 17 Backend Development» автор предлагает использовать Redis для кэширования часто запрашиваемых данных, что значительно повышает производительность приложения.
Пример кода:
public class RedisCacheService {
private final StringRedisTemplate redisTemplate;
public RedisCacheService(StringRedisTemplate redisTemplate) {
this.redisTemplate = redisTemplate;
}
public String getFromCache(String key) {
ValueOperations<String, String> ops = redisTemplate.opsForValue();
return ops.get(key);
}
public void putToCache(String key, String value) {
ValueOperations<String, String> ops = redisTemplate.opsForValue();
ops.set(key, value);
}
}
Преимущества:
— Быстрый доступ к данным из кэша.
— Уменьшение количества запросов к базе данных.
— Лёгкая интеграция с существующими приложениями.
Еще больше полезных книг — в нашем канале @progbook
Please open Telegram to view this post
VIEW IN TELEGRAM
Сейчас большинство представлений об ИИ ограничиваются одним агентом — моделькой, которая что-то предсказывает, генерирует или классифицирует.
Но реальный прорыв начинается, когда этих агентов становится несколько.
Когда они начинают взаимодействовать друг с другом.
Когда появляется координация, распределение ролей, память, планирование — всё это и есть мультиагентные системы (MAS).
— Microsoft делает язык DroidSpeak для общения между LLM
— Open Source-фреймворки вроде LangChain, AutoGen, CrewAI, LangGraph — бурно развиваются
— компании, включая МТС, уже применяют MAS в боевых задачах
🎓 На курсе мы подходим к этому практично:
Именно на третьем уроке вы впервые собираете не просто «умного бота», а живую систему из агентов, которая работает вместе — как команда.
Причём по-настоящему: врач, SQL-аналитик, travel-планировщик, Python-генератор, поисковик.
Please open Telegram to view this post
VIEW IN TELEGRAM